{ "cells": [ { "cell_type": "markdown", "id": "specific-boulder", "metadata": {}, "source": [ "# Salsa al Parque" ] }, { "cell_type": "markdown", "id": "written-elephant", "metadata": {}, "source": [ "Tags: Parámetro binario, Variable Binaria, Scheduling" ] }, { "cell_type": "code", "execution_count": 1, "id": "fe8c0d77", "metadata": { "tags": [ "hide-input", "thebe-init" ] }, "outputs": [], "source": [ "import os\n", "# Por precaución, cambiamos el directorio activo de Python a aquel que contenga este notebook\n", "if \"optimizacion\" in os.listdir():\n", " os.chdir(r\"optimizacion/Formulaciones/8. Salsa al parque/\")" ] }, { "cell_type": "markdown", "id": "annoying-circus", "metadata": {}, "source": [ "## Enunciado\n", "\n", "" ] }, { "cell_type": "markdown", "id": "01476fd4", "metadata": {}, "source": [ "El comité organizador del festival *Salsa al Parque* te ha contratado para definir el horario en el que se presentará cada uno de los cinco artistas principales. El comité le ha indicado que los artistas deben ser asignados a lo largo de una franja de 12 horas. En particular, hay un conjunto $A$ de artistas y un conjunto $H$ de horas. Salsa al Parque ha pronosticado la audiencia $a_{it}$ que tendría cada uno de los artistas $i\\in A$ en caso de presentarse en cada hora $t \\in T$. Además, el comité estableció la duración $d_{i}$ (horas) que debe tener la presentación de cada uno de estos artistas $i\\in A$. Para generar la planeación se definió la variable binaria $x_{it}$ la cual toma el valor de uno si el artista $i \\in A$ inicia la presentación en la hora $t \\in H$ y cero de lo contrario. También, se decidió sobre la variable $y_{it}$, la cual toma el valor de uno si el artista $i \\in A$ se presenta durante la hora $t \\in H$ y cero de lo contrario." ] }, { "cell_type": "markdown", "id": "fb8be63d", "metadata": {}, "source": [ "Debido a la importancia de cada uno de estos artistas, el comité enfatizó que todos los artistas se deben presentar una sola vez y que en cada hora se pueden presentar máximo dos artistas en simultaneo. Con el fin de propiciar presentaciones de calidad, el comité organizador te solicitó garantizar que cada artista realiza su presentación completa en horas consecutivas. El comité ha pedido definir las horas en las que se presentará cada artista de manera que se maximice la audiencia total. La Tabla 1 presenta la duración de la presentación y la audiencia esperada en cada hora para cada uno de los artistas." ] }, { "cell_type": "markdown", "id": "9d1b2564", "metadata": {}, "source": [ "

Tabla 1. Audiencia esperada para cada artista en cada horario

" ] }, { "cell_type": "markdown", "id": "0c1715e9", "metadata": {}, "source": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Audiencia (miles de personas)
Hora
ArtistaDuración Presentación (horas)123456789101112
12119725781350272926792946156329982879112625591129
23103420091515225416241277201025631384269520532585
32105818421443199528191998140117081346167418161032
43108212062366101327621479249615091673135011282669
52280110032965229511472156105828571968276421531518
" ] }, { "cell_type": "markdown", "id": "9061e7aa", "metadata": {}, "source": [ "La siguiente tabla presenta una solución factible, aunque subóptima, para la situación planteada anteriormente:" ] }, { "cell_type": "markdown", "id": "081012c1", "metadata": {}, "source": [ "

Tabla 1. Configuración factible de los itinerarios.

" ] }, { "cell_type": "markdown", "id": "af90e97a", "metadata": {}, "source": [ "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Hora
Artista123456789101112
1
2
3
4
5
" ] }, { "cell_type": "markdown", "id": "linear-shadow", "metadata": {}, "source": [ "## Formulación\n", "\n", "" ] }, { "cell_type": "markdown", "id": "f08dc1b9", "metadata": {}, "source": [ "**a.** Formula matemáticamente un modelo de optimización de forma general que represente la\n", "situación anterior. Defina clara y rigurosamente: \n", "- Conjuntos\n", "- Parámetros\n", "- Variables de decisión\n", "- Restricciones\n", "- Naturaleza de las variables\n", "- Función objetivo" ] }, { "cell_type": "markdown", "id": "geographic-header", "metadata": {}, "source": [ "## Implementación" ] }, { "cell_type": "markdown", "id": "4725d708", "metadata": {}, "source": [ "**b.** Resuelve el modelo planteado utilizando la librería de PuLP en Python. ¿Cuál es la solución óptima del problema? " ] }, { "cell_type": "markdown", "id": "2a1a82c3", "metadata": {}, "source": [ "### Librerías" ] }, { "cell_type": "markdown", "id": "f597d592", "metadata": {}, "source": [ "Importa el módulo `matplotlib.pyplot` para crear gráficas y la librería `pulp` para crear y resolver el modelo." ] }, { "cell_type": "code", "execution_count": 2, "id": "323a0476", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "837873b4", "metadata": {}, "source": [ "### Conjuntos" ] }, { "cell_type": "markdown", "id": "48fddac0", "metadata": {}, "source": [ "Define los conjuntos `A` y `H` que representan respectivamente los artistas y las horas.\n", "\n", "Recuerda que por conveniencia de preservar el orden de los elementos de los conjuntos, no siempre deberás definirlos con el tipo `set`." ] }, { "cell_type": "code", "execution_count": 3, "id": "d9209bb7", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "8c58ff99", "metadata": {}, "source": [ "### Parámetros" ] }, { "cell_type": "markdown", "id": "d981d80d", "metadata": {}, "source": [ "Define o importa los parámetros del modelo." ] }, { "cell_type": "code", "execution_count": 4, "id": "16df6fb4", "metadata": {}, "outputs": [], "source": [ "# Duración de la presentación de cada artista\n", "d = {\"A_1\": 2, \"A_2\": 3, \"A_3\": 2, \"A_4\": 3, \"A_5\": 2}\n", "\n", "# Audiencia de cada artista en cada hora\n", "a = {\n", " (\"A_1\", 1): 1197,\n", " (\"A_1\", 2): 2578,\n", " (\"A_1\", 3): 1350,\n", " (\"A_1\", 4): 2729,\n", " (\"A_1\", 5): 2679,\n", " (\"A_1\", 6): 2946,\n", " (\"A_1\", 7): 1563,\n", " (\"A_1\", 8): 2998,\n", " (\"A_1\", 9): 2879,\n", " (\"A_1\", 10): 1126,\n", " (\"A_1\", 11): 2559,\n", " (\"A_1\", 12): 1129,\n", " (\"A_2\", 1): 1034,\n", " (\"A_2\", 2): 2009,\n", " (\"A_2\", 3): 1515,\n", " (\"A_2\", 4): 2254,\n", " (\"A_2\", 5): 1624,\n", " (\"A_2\", 6): 1277,\n", " (\"A_2\", 7): 2010,\n", " (\"A_2\", 8): 2563,\n", " (\"A_2\", 9): 1384,\n", " (\"A_2\", 10): 2695,\n", " (\"A_2\", 11): 2053,\n", " (\"A_2\", 12): 2585,\n", " (\"A_3\", 1): 1058,\n", " (\"A_3\", 2): 1842,\n", " (\"A_3\", 3): 1443,\n", " (\"A_3\", 4): 1995,\n", " (\"A_3\", 5): 2819,\n", " (\"A_3\", 6): 1998,\n", " (\"A_3\", 7): 1401,\n", " (\"A_3\", 8): 1708,\n", " (\"A_3\", 9): 1346,\n", " (\"A_3\", 10): 1674,\n", " (\"A_3\", 11): 1816,\n", " (\"A_3\", 12): 1032,\n", " (\"A_4\", 1): 1082,\n", " (\"A_4\", 2): 1206,\n", " (\"A_4\", 3): 2366,\n", " (\"A_4\", 4): 1013,\n", " (\"A_4\", 5): 2762,\n", " (\"A_4\", 6): 1479,\n", " (\"A_4\", 7): 2496,\n", " (\"A_4\", 8): 1509,\n", " (\"A_4\", 9): 1673,\n", " (\"A_4\", 10): 1350,\n", " (\"A_4\", 11): 1128,\n", " (\"A_4\", 12): 2669,\n", " (\"A_5\", 1): 2801,\n", " (\"A_5\", 2): 1003,\n", " (\"A_5\", 3): 2965,\n", " (\"A_5\", 4): 2295,\n", " (\"A_5\", 5): 1147,\n", " (\"A_5\", 6): 2156,\n", " (\"A_5\", 7): 1058,\n", " (\"A_5\", 8): 2857,\n", " (\"A_5\", 9): 1968,\n", " (\"A_5\", 10): 2764,\n", " (\"A_5\", 11): 2153,\n", " (\"A_5\", 12): 1518,\n", "}\n", "\n", "# Máxima cantidad de artistas presentando en simultaneo\n", "k = 2" ] }, { "cell_type": "markdown", "id": "70fd6598", "metadata": {}, "source": [ "### Objeto del modelo" ] }, { "cell_type": "markdown", "id": "aa975e80", "metadata": {}, "source": [ "Construye un problema al que luego agregarás las restricciones y la función objetivo." ] }, { "cell_type": "code", "execution_count": 5, "id": "a1501b81", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "970af788", "metadata": {}, "source": [ "### Variables de decisión" ] }, { "cell_type": "markdown", "id": "1e670ec8", "metadata": {}, "source": [ "Define las variables del problema de manera que estén contenidas en diccionarios indexados en los conjuntos de sus variables respectivas." ] }, { "cell_type": "code", "execution_count": 6, "id": "e1febe93", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "f843462c", "metadata": {}, "source": [ "### Función objetivo" ] }, { "cell_type": "markdown", "id": "97df9059", "metadata": {}, "source": [ "Agrega al problema la función objetivo. Recuerda que al definir el problema, ya definiste si este es de maximización o minimización." ] }, { "cell_type": "code", "execution_count": 7, "id": "2fd8a365", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "89f524db", "metadata": {}, "source": [ "### Restricciones" ] }, { "cell_type": "markdown", "id": "77e7e409", "metadata": {}, "source": [ "Agrega al problema las restricciones del modelo." ] }, { "cell_type": "code", "execution_count": 8, "id": "f986d5ee", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "265a2a10", "metadata": {}, "source": [ "### Resolver el problema" ] }, { "cell_type": "markdown", "id": "d7661201", "metadata": {}, "source": [ "Invoca el optimizador. Este paso le asigna un valor a las variables incluidas en las restricciones o función objetivo del modelo." ] }, { "cell_type": "code", "execution_count": 9, "id": "ae811704", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "655b238a", "metadata": {}, "source": [ "### Imprimir resultados" ] }, { "cell_type": "markdown", "id": "8a7a8a35", "metadata": {}, "source": [ "Antes de estudiar el óptimo del modelo, identifica en el estado del optimizador si pudo resolver el problema." ] }, { "cell_type": "code", "execution_count": 10, "id": "whole-trust", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "ea6fe01e", "metadata": {}, "source": [ "Identifica también el valor de la función objetivo." ] }, { "cell_type": "code", "execution_count": 11, "id": "11b75d2c", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "6e59d608", "metadata": {}, "source": [ "Por último, imprime de manera estructurada el valor de las variables de decisión y otras expresiones de interés." ] }, { "cell_type": "code", "execution_count": 12, "id": "ad53e1be", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "1b31089f", "metadata": {}, "source": [ "### Visualizar resultados" ] }, { "cell_type": "markdown", "id": "8f832f83", "metadata": {}, "source": [ "Ahora que conoces el valor de las variables de decisión, desarrolla una gráfica..." ] }, { "cell_type": "code", "execution_count": 13, "id": "727798d1", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí el código en python de su formulación.\n" ] }, { "cell_type": "markdown", "id": "2c390f8b", "metadata": {}, "source": [ "## Créditos" ] }, { "cell_type": "markdown", "id": "hired-insulation", "metadata": {}, "source": [ "Equipo Principios de Optimización
\n", "Autores: Alejandro Mantilla, Ariadna De Ávila, Alfaima Solano
\n", "Desarrollo: Alejandro Mantilla, Alfaima Solano
\n", "Última fecha de modificación: 08/04/2023" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" } }, "nbformat": 4, "nbformat_minor": 5 }